﻿Option Explicit On
Option Strict On

''' <summary>
''' Formulario Agregar Cita: Formulario para agregar citas a la BBDD
''' </summary>
''' <author>Héctor Pastor</author>

Public Class AgregarCita

    Private _miBD As BBDD
    Private _fecha As DateTime
    Private _listaServicios As List(Of Servicio)
    Private _listaUsuarios As List(Of Usuario)
    Private _listaClientes As List(Of Cliente)
    Private _cita As Cita


    Private Sub btComprobar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btComprobar.Click
        If comprobarDatos() Then

            MessageBox.Show("Fecha libre para la cita")
        Else
            MessageBox.Show("Fecha para la cita ocupada")
        End If
    End Sub

    Private Sub btAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btAgregar.Click

        If Not comprobarDatos() Then
            MsgBox("Datos Incorrectos, no se puede insertar la cita", MsgBoxStyle.Information, Me.Text)
        Else

            Try
                _miBD.Conectar()
                If Not _miBD.InsertarCita(_cita) Then
                    MsgBox("Hubo un error insertando la cita en la base de datos", MsgBoxStyle.Information, Me.Text)
                Else
                    _cita = _miBD.DevuelveCita("Select * from cita where cod_cliente = " & _cita.CodigoUsuario & " and " & _
                                                 "cod_empleado = " & _cita.CodigoCliente & " and fecha = #" & _
                                                 _cita.Fecha.ToString("dd/MM/yyyy HH:mm:ss") & "#")

                    For Each fila As DataGridViewRow In dgvListaConceptos.Rows
                        If Not _miBD.InsertarConcepto(New Concepto(CInt(fila.Cells.Item(0).Value), _cita.Codigo)) Then
                            MsgBox("Hubo un error insertando los servicios", MsgBoxStyle.Information, Me.Text)
                        End If
                    Next
                End If
                _miBD.Desconectar()
                MsgBox("Cita agregada a la base de datos", MsgBoxStyle.Information, Me.Text)
            Catch ex As Exception
                _miBD.Desconectar()
                MsgBox("Hubo un error conectando con la Base de Datos", MsgBoxStyle.Information, Me.Text)
            End Try
        End If

    End Sub

    Private Sub btCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btCancelar.Click
        Me.Close()

    End Sub

    'Private Sub btBuscarCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btBuscarCliente.Click

    '    If Not Validaciones.CaracteresInvalidos(tbBuscarCliente.Text) Then

    '        rellenarClientes("Select * from cliente where nombre like '*" & tbBuscarCliente.Text & "*' or " & _
    '                         "apellidos like '*" & tbBuscarCliente.Text & "*' order by apellidos")
    '    End If
    'End Sub


    'Private Sub btBuscarEmpleado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btBuscarEmpleado.Click
    '    If Not Validaciones.CaracteresInvalidos(tbBuscarCliente.Text) Then

    '        rellenarUsuarios("Select * from empleado where nombre like '*" & tbBuscarEmpleado.Text & "*' or " & _
    '                         "apellidos like '*" & tbBuscarEmpleado.Text & "*' order by apellidos")
    '    End If
    'End Sub

    Private Sub AgregarCita_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        _miBD = New BBDD()
        _fecha = DateTime.Now
        _cita = New Cita

        dtpFechaCita.Value = _fecha
        tbHora.Text = _fecha.ToString("HH:mm")

        'cargamos las listas
        rellenarServicios("Select * from servicios order by nombre")
        rellenarClientes("select * from cliente order by apellidos")
        rellenarUsuarios("Select * from empleado order by apellidos")

        'preseleccionamos resultados
        cbServicios.SelectedIndex = -1
        cbNombreCliente.SelectedIndex = -1
        cbNombreEmpleado.SelectedIndex = _listaUsuarios.IndexOf(Principal.UsuarioPrincipal)

    End Sub

    Private Sub btAñadirConcepto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btAñadirConcepto.Click

        If cbServicios.SelectedIndex <> -1 Then
            añadirServicio(_listaServicios(cbServicios.SelectedIndex).Cod)
        End If
    End Sub


    Private Sub rellenarServicios(ByVal p1 As String)
        _miBD.Conectar()
        _listaServicios = _miBD.ListaServicios(p1)
        _miBD.Desconectar()

        For Each serv As Servicio In _listaServicios
            cbServicios.Items.Add(serv.Nombre)
        Next
    End Sub

    Private Sub rellenarClientes(ByVal p1 As String)
        _miBD.Conectar()
        _listaClientes = _miBD.ListaClientes(p1)
        _miBD.Desconectar()

        cbNombreCliente.Items.Clear()
        For Each client As Cliente In _listaClientes
            cbNombreCliente.Items.Add(client.Apellidos & ", " & client.Nombre)
        Next
    End Sub

    Private Sub rellenarUsuarios(ByVal p1 As String)
        _miBD.Conectar()
        _listaUsuarios = _miBD.ListaUsuarios(p1)
        _miBD.Desconectar()

        cbNombreEmpleado.Items.Clear()
        For Each user As Usuario In _listaUsuarios
            cbNombreEmpleado.Items.Add(user.Apellidos & ", " & user.Nombre)
        Next
    End Sub



    ' Añade una fila al datagridview
    Private Sub añadirServicio(ByVal codigoServicio As Integer)
        Dim servicioAñadido As Boolean
        Dim pos As Integer

        servicioAñadido = False

        ' se localiza el servicio que se quiere insertar
        For Each serv As Servicio In _listaServicios
            If serv.Cod = codigoServicio Then
                pos = _listaServicios.IndexOf(serv)
            End If
        Next

        For Each fila As DataGridViewRow In dgvListaConceptos.Rows
            If CInt(fila.Cells(0).Value) = _listaServicios(pos).Cod Then
                servicioAñadido = True
            End If
        Next

        ' si el servicio no está añadido se inserta en el datagridview
        If Not servicioAñadido Then
            dgvListaConceptos.Rows.Add(_listaServicios(pos).Cod, _listaServicios(pos).Nombre, _
                                  _listaServicios(pos).Precio, _listaServicios(pos).Descripcion)

        End If
    End Sub


    Private Sub recogerDatos()

        If cbNombreCliente.SelectedIndex > -1 And cbNombreEmpleado.SelectedIndex > -1 Then

            _fecha = New DateTime(dtpFechaCita.Value.Year, dtpFechaCita.Value.Month, _
                              dtpFechaCita.Value.Day, CInt(tbHora.Text.Split(":"c)(0)), CInt(tbHora.Text.Split(":"c)(1)), 0)

            _cita.CodigoCliente = _listaClientes(cbNombreCliente.SelectedIndex).Codigo
            _cita.CodigoUsuario = _listaUsuarios(cbNombreEmpleado.SelectedIndex).Codigo
            _cita.Fecha = _fecha
        End If
    End Sub

    Private Function comprobarDatos() As Boolean
        Try
            recogerDatos()

            _miBD.Conectar()
            If _miBD.ExisteCita(_cita) Then
                comprobarDatos = False
            Else
                comprobarDatos = True
            End If

            _miBD.Desconectar()
        Catch ex As Exception
            comprobarDatos = False
            _miBD.Desconectar()
            MsgBox("Hubo un error conectando con la Base de Datos", MsgBoxStyle.Information, Me.Text)
        End Try
    End Function

    Private Sub formulario_FormClosing(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.FormClosing
        Principal.ActualizarCitas()
    End Sub


    Private Sub dgvListaConceptos_CellContentClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvListaConceptos.CellDoubleClick
        dgvListaConceptos.Rows.Remove(dgvListaConceptos.CurrentRow)
    End Sub
End Class